#ifndef COMPRESOR_H
#define COMPRESOR_H

#include <qthread.h>
#include <QImage>
#include <QString>
#include <QDebug>
#include "predictor_header.h"
#include "huffman_coder.h"
#include <math.h>
//#include "file_saver.h"
//#include "file_reader.h"



class compresor : public QThread
{
    Q_OBJECT

public:
    compresor(void);
    ~compresor(void);

signals:
    void bitmap_compressed();                //plik skompresowany
    void bitmap_decompressed(QImage *image);              //plik zdekompresowany
    void new_data(short *value);

protected:
    void run();

private:
    QImage *bitmap, *debitmap;
    bool compression_start;
    bool decompression_start;
    QString compression_path;
    QString decompression_path;
    bool forward_adaptation;
    void compresor_forward3(int size);
    void compresor_forward2(int size);
    void PNGm5(void);
    void MED_MAP(void);
    void Graham(void);
    void DARC(void);
    void ALCM(int size);
    void de_compresor_forward3(predictor_header*);
    void de_compresor_forward2(predictor_header*);
    void de_PNGm5(predictor_header*);
    void de_MED_MAP(predictor_header*);
    void de_Graham(predictor_header*);
    void de_DARC(predictor_header*);
    void de_ALCM(predictor_header*);
    int block_size;
    predictor_header *parameters;
    //predictor_header load;
    short *data, *dedata;
    float short_to_float(unsigned short);
    unsigned short float_to_short(float);
    huffman_coder huffman;
    int predictor;

private slots:
    void new_bitmap(QImage* image);         //plik do kompresji
    void compression_run(QString path);     //uruchom kompresję do pliku
    void decompression_run(QString path);   //uruchom dekompresję z pliku
    void adaptation_changed_forward();      //zmiana adaptacji na w przód
    void adaptation_changed_backward();     //zmiana adaptacji na w tył
    void block_size_changed(int value);     //nowy rozmiar bloku
    void predictor_change(int new_predictor);   //nowy predyktor
};

#endif // COMPRESOR_H
